# -*- coding: utf-8 -*-
"""
@Time: 2021/5/26 11:22
@Author: 鹄望潇湘
@File: Main.py
@desc: 用来将target_col.txt（其内容来自需要导入到研究生系统中的文件）中的英文列名映射成中文列名，以便于
导入数据时可以使用自动模糊匹配功能。\n
在target_col.txt中存在而映射表（reflect.txt）中不存在的字段将保持英文名不变, 否则会将其转换成中文名\n
使用方法：将需要导入的文件中的列名复制下来粘贴进target_col.txt中，然后运行Main.py，输出“完成”后的数据就是转换后的列名，
将其复制到需要导入的文件中并覆盖原来的列名。然后在系统中导入该文件，使用自动模糊匹配功能。
"""


def read_target(path: str) -> list:
    result = []
    for line in open(path, 'r'):
        line = line.strip('\n')
        result = line.split('\t')
    return result


def read_reflect(path: str) -> dict:
    result = {}
    for line in open(path, 'r', encoding='utf-8'):
        line = line.strip('\n')
        temp = line.split('\t')
        if temp[0] in result.keys():
            print("警告：字段值重复，"+temp[0]+", "+temp[1])
        result[temp[0]] = temp[1].lower()
    return result


def match(target: list, dictionary: dict):
    print("目标列表长度: " + str(len(target)))
    print("映射列表长度: " + str(len(dictionary)))

    print("不存在映射的字段:")
    values = dictionary.values()
    for item in target:
        if item not in values:
            print(item)

    print("存在映射列表中，目标列中不存在的字段：")
    for item in values:
        if item not in target:
            print(item)

    print("映射中存在重复的字段：")
    for item in values:
        count = 0
        for it2 in values:
            if item == it2:
                count = count+1
        if count >= 2:
            print(item)

    print("完成")


def create_chinese_col(target: list, dictionary: dict) -> list:
    result = []
    temp_dict = {}
    added_col = []
    for item in dictionary.keys():
        value = dictionary[item]
        if value != '#':
            temp_dict[value] = item
        else:
            added_col.append(item)

    for item in target:
        if item in temp_dict.keys():
            result.append(temp_dict[item])
        else:
            result.append(item)

    return result + added_col


def print_list(target: list):
    strs = ""
    for item in target:
        strs = strs+item+"\t "
    print(strs)


if __name__=='__main__':
    resu = read_target("./target_col.txt")

    resu2 = read_reflect("./reflect.txt")

    match(resu, resu2)

    resu3 = create_chinese_col(resu, resu2)

    print_list(resu3)

